const db = require('../db/index');

const bcrypt = require('bcryptjs');

// 导入jwt 用于生成token字符串
const jwt = require('jsonwebtoken')

const jwtconfig = require('../jwt_config/index')

exports.register = (req, res) => {
  // req--前端发送给后端的数据，res 是后端发送给前端的数据
  const regiterObj = req.body;
  
  // 1判断接受用户的数据是否为空
  if (!regiterObj.account || !regiterObj.password) {
    return res.send({
      status: 1,
      message: '用户账号或密码不能为空'
    })
  }
  // 2判断用户的账号是否已存在
  const sqlStr = 'select * from users where account=?'
  db.query(sqlStr, regiterObj.account, (err, results) => {

    if (err) {
      return res.send({
        status: 1,
        message: '注册用户失败' + err.message
      })
    }
    
    if (results.length > 0) {
      return res.send({
        status: 1,
        message: '用户账号已存在'
      })
    }

    // 2对密码进行加密  10 加密后的长度
    regiterObj.password = bcrypt.hashSync(regiterObj.password, 10)

    // 4、将账号和密码插入到数据库中
    const sql = 'insert into users set ?'
    const identity = '用户'
    const create_time = new Date()
    
    db.query(sql, {
      account: regiterObj.account,
      password: regiterObj.password,
      identity,
      create_time,
      status: 0 // 厨师未冻结状态为0
    }, (err, results) => {

      if (results.affectedRows !== 1) {
        return res.send({
          status: 1,
          message: '注册用户失败'
        })
      }
      res.send({
        status: 0,
        message: '注册注册成功'
      })
    })
  })
}

exports.login = (req, res) => {
  let loginInfo = req.body;
  // 查看数据库中是否存在该用户
  const sqlStr = 'select * from users where account=?'
  db.query(sqlStr, loginInfo.account, (err, results) => {
    // 做统一的错误处理  再数据库断开的时候会报错
    if (err) return res.cc(err)
    if (results.length !== 1) return res.cc('用户不存在')
    // 对前端传过来的密码进行解密并比对数据库米啊
    const compareResult = bcrypt.compareSync(loginInfo.password, results[0].password)
    if (!compareResult) return res.cc('登录失败，密码错误')
    // 对账号是否冻结进行判断
    if (results[0].status === 1) {
      return res.cc('该账号已被冻结，请联系管理员')
    }
    // 生成token字符串  剔除加密后的密码，头像，创建时间、更新时间
    const user = {
      ...results[0],
      password: '',
      imgUrl: '',
      create_time: '',
      update_time: ''
    }
    // 设置token的有效时长  7h
    const tokenStr = jwt.sign(user, jwtconfig.jwtSecretKey, {
      expiresIn: '7h'
    })
    res.send({
      results: results[0],
      status: 0,
      message: '登陆成功',
      token: 'Bearer' + tokenStr
    })

  })
}